package com.example.houselease.mapper;

import com.example.houselease.pojo.dto.admin.PermissionDTO;
import com.example.houselease.pojo.dto.admin.RolePermissionDTO;
import com.example.houselease.pojo.entity.Role;
import com.example.houselease.pojo.vo.RoleDetailVO;
import com.example.houselease.pojo.vo.RoleListVO;
import com.example.houselease.pojo.vo.RolePerDetailVO;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;

/**
 * 角色mapper
 * @author sf
 * @version 0.0.1
 * */
@Repository
public interface RoleMapper {

    /**
     * 角色列表
     * @return 数据
     * */
    List<RoleListVO> select();

    /**
     * 添加角色
     * @param role 角色数据
     * */
    int insert(Role role);

    /**
     * 通过名称查询数据个数
     * @param name 名称
     * @return 数据个数
     * */
    int countByName(String name);

    /**
     * 查询角色详情
     * */
    RoleDetailVO selectById(Long id);

    /**
     * 通过角色id查询权限信息
     * @return 数据
     * */
    List<RolePerDetailVO> selectPerById(Long id);

    /**
     * 通过角色id，启用状态 查询权限信息
     * @param id 角色id
     * @param enable 启用状态
     * @return 数据
     * */
    List<RolePerDetailVO> selectPerEnableById(Long id,Integer enable);

    /**
     * 删除角色
     * @param id 角色id
     * */
    int deleteById(Long id);

    /**
     * 删除管理员角色关联的数据
     * @param roleId 角色id
     * */
    int deleteAdminRoleByRoleId(Long roleId);

    /**
     * 启用角色
     * @param id 角色id
     * */
    int updateRoleEnable(Long id);

    /**
     * 禁用角色
     * @param id 角色id
     * */
    int updateRoleDisable(Long id);

    /**
     * 更新角色
     * @param role 角色数据
     * */
    int update(Role role);

    /**
     * 添加新的角色权限管理表数据
     * @param roleId 角色id
     * */
    int insertRolePer(Long roleId, @Param("perIds") List<Long> perIds);

    /**
     * 启用角色权限关联表数据
     * @param roleId 角色id
     * @param perId 权限id
     * */
    int updateRolePerEnable(Long roleId, @Param("perIds") List<Long> perId);

    /**
     * 禁用角色权限关联表数据
     * @param roleId 角色id
     * @param perIds 权限id
     * */
    int updateRolePerDisable(Long roleId, @Param("perIds") List<Long> perIds);

}
